WebXRã®åº§æšç³»ã培åºè§£èª¬ãã¯ãŒã«ããããŒã«ã«ãåç §ç©ºéãç¶²çŸ ããæ£ç¢ºã§çŽæçãªæ²¡å ¥åã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ãªç¥èãæäŸããŸãã
WebXR空éã®ããã²ãŒã·ã§ã³ïŒæ²¡å ¥åäœéšã®ããã®åº§æšç³»ç®¡çã®ç¿åŸ
WebXRã¯ããžã¿ã«ãšç©ççãªäžçã®å¢çç·ãææ§ã«ããæ²¡å ¥åäœéšãåµé ããæãéããŸãããã®æè¡ã®äžå¿ã«ããã®ã座æšç³»ã®æŠå¿µã§ãããããã®ã·ã¹ãã ãçè§£ãã广çã«ç®¡çããããšã¯ãæ£ç¢ºã§çŽæçããã€é åçãªWebXRã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ãã
WebXRã«ãããŠåº§æšç³»ãéèŠãªçç±
ä»®æ³åç©é€šã建èšããŠãããšæ³åããŠã¿ãŠãã ããããŠãŒã¶ãŒã«ã¯ãä»®æ³ç©ºéå ã«æ£ç¢ºã«é 眮ãããå±ç€ºç©ãæ¢çŽ¢ããŠãããããã§ãããããããã¯ãããžã¿ã«ã³ã³ãã³ããçŸå®äžçã«éãåãããæ¡åŒµçŸå®ã¢ããªãéçºããŠãããããããŸãããã©ã¡ãã®ã·ããªãªã§ãããªããžã§ã¯ãã®äœçœ®ãšåããå®çŸ©ãããŠãŒã¶ãŒã®åãã远跡ããæ¹æ³ãå¿ èŠã§ããããã§åº§æšç³»ãç»å ŽããŸãã座æšç³»ã¯ãWebXRã·ãŒã³å ã®ç©ºéçé¢ä¿ãå®çŸ©ããããã®ãã¬ãŒã ã¯ãŒã¯ãæäŸããŸãã
座æšç³»ããã£ãããšçè§£ããŠããªããšã次ã®ãããªåé¡ãçºçããŸãïŒ
- äžæ£ãªãªããžã§ã¯ãé çœ®ïŒ ãªããžã§ã¯ããééã£ãå Žæãåãã«è¡šç€ºãããã
- äžå®å®ãªãã©ããã³ã°ïŒ ä»®æ³ãªããžã§ã¯ããçŸå®äžçã«å¯ŸããŠããªããããããã¬ã¿ã€ãããããã
- äžè²«æ§ã®ãªããŠãŒã¶ãŒäœéšïŒ ããã€ã¹ãç°å¢ã«ãã£ãŠã·ãŒã³ã®èªèæ¹æ³ãç°ãªãã
WebXRã«ãããäž»èŠãªåº§æšç©ºé
WebXRã¯ããããããç¹å®ã®ç®çãæããããã€ãã®äž»èŠãªåº§æšç©ºéãå©çšããŸãããããã®ç©ºééã®é¢ä¿ãçè§£ããããšã¯ãæ£ç¢ºãªç©ºéãã©ããã³ã°ãšãªããžã§ã¯ãé 眮ã«äžå¯æ¬ ã§ãã
1. ã¯ãŒã«ã空éïŒãŸãã¯ã°ããŒãã«ç©ºéïŒ
ã¯ãŒã«ã空éã¯ãWebXRã·ãŒã³å šäœã®ããã®ãã¹ã¿ãŒåº§æšç³»ã§ããä»ã®ãã¹ãŠã®ãªããžã§ã¯ãã空éãçžå¯Ÿçã«é 眮ããã究極ã®åç §ãã¬ãŒã ã§ããä»®æ³äžçãæ¡åŒµäžçã®ãã¹ãŠã®ãã®ã®çµ¶å¯Ÿçãªã¢ã³ã«ãŒãã€ã³ããšèããŠãã ããã
ã¯ãŒã«ã空éã®äž»ãªç¹åŸŽïŒ
- éçïŒ ã¯ãŒã«ã空éèªäœã¯ç§»åãå転ãããŸããã
- åç¹ (0, 0, 0)ïŒ ã¯ãŒã«ã空éã®åç¹ã¯ããã¹ãŠã®åº§æšã®äžå¿çãªåç §ç¹ã§ãã
- å€§èŠæš¡ïŒ ã¯ãŒã«ã空éã¯éåžžãä»ã®åº§æšç©ºéãããã¯ããã«åºãé åãå æ¬ããŸãã
䜿çšäŸïŒ ä»®æ³ã®å€ªéœç³»ãäœæãããšæ³åããŠãã ããã倪éœãææããããŠãããã®è»éã¯ãã¹ãŠãã¯ãŒã«ã空éã®åç¹ãåºæºã«å®çŸ©ãããŸãã倪éœã®äœçœ®ã¯ã¯ãŒã«ã空éã§ (0, 0, 0) ãããããŸããããå°çã®äœçœ®ãšå転ã¯ããã«å¯ŸããŠå®çŸ©ãããŸããä»®æ³ç°å¢ã®å¶çŽå ã§ãåºå€§ãªè·é¢ã«ãããéæ²³ã衚çŸããããšãã§ããŸãã
2. ããŒã«ã«ç©ºéïŒãŸãã¯ãªããžã§ã¯ã空éïŒ
ããŒã«ã«ç©ºéã¯ãåã ã®ãªããžã§ã¯ãã«åºæã®åº§æšç³»ã§ãããªããžã§ã¯ãèªèº«ã®åç¹ãåºæºã«å®çŸ©ãããŸããã·ãŒã³å ã®åãªããžã§ã¯ãã¯ç¬èªã®ããŒã«ã«ç©ºéãæã£ãŠããããã®å éšæ§é ã倿ãç°¡åã«ç®¡çããããšãã§ããŸãã
ããŒã«ã«ç©ºéã®äž»ãªç¹åŸŽïŒ
- ãªããžã§ã¯ãäžå¿ïŒ ããŒã«ã«ç©ºéã®åç¹ã¯ãéåžžããªããžã§ã¯ãã®äžå¿ãŸãã¯ããŒãã€ã³ãã§ãã
- ç¬ç«ïŒ åãªããžã§ã¯ãã¯ç¬èªã®ç¬ç«ããããŒã«ã«ç©ºéãæã£ãŠããŸãã
- éå±€çïŒ ããŒã«ã«ç©ºéã¯äºãã«å ¥ãåã«ããããšãã§ããéå±€çãªé¢ä¿ãäœæããŸãïŒäŸïŒäœã«æ¥ç¶ãããè ã«æ¥ç¶ãããæïŒã
䜿çšäŸïŒ ä»®æ³ã®è»ãèããŠã¿ãŸãããããã®ããŒã«ã«ç©ºéã®åç¹ã¯ãè»ã®ã·ã£ãŒã·ã®äžå¿ã«ãããããããŸãããè»èŒªã座åžããã³ãã«ã¯ãã¹ãŠãè»ã®ããŒã«ã«ç©ºéãåºæºã«é 眮ããã³å転ãããŸããã¯ãŒã«ã空éã§è»ãåãããšããã¹ãŠã®ã³ã³ããŒãã³ãã¯è»ã®ããŒã«ã«ç©ºé倿ã®åã§ãããããäžç·ã«åããŸãã
3. åç §ç©ºé
åç §ç©ºéã¯ãWebXRç°å¢å ã§ã®ãŠãŒã¶ãŒã®äœçœ®ãšåãã远跡ããããã«äžå¯æ¬ ã§ããç©çäžçãšä»®æ³äžçã®éã®é¢ä¿ã確ç«ããæ¹æ³ãæäŸããŸããWebXRã¯ãããŸããŸãªãã©ããã³ã°ã·ããªãªã«åãããŠèª¿æŽãããããã€ãã®ã¿ã€ãã®åç §ç©ºéãæäŸããŸãã
åç §ç©ºéã®çš®é¡ïŒ
- ãã¥ãŒã¯ãŒåç §ç©ºéïŒViewer Reference SpaceïŒïŒ ãŠãŒã¶ãŒã®é ã®äœçœ®ãšåãã衚ããŸããæ¬è³ªçã«äžå®å®ã§ããŠãŒã¶ãŒãé ãåãããã³ã«ãã¬ãŒã ããšã«å€åããŸããç°å¢å ã«ãªããžã§ã¯ããæ°žç¶çã«é 眮ããã«ã¯çæ³çã§ã¯ãããŸããã
- ããŒã«ã«åç §ç©ºéïŒLocal Reference SpaceïŒïŒ WebXRã»ãã·ã§ã³éå§æã®ãŠãŒã¶ãŒã®åæäœçœ®ã«åºå®ããããå®å®ãããã©ããã³ã°ç©ºéãæäŸããŸãããŠãŒã¶ãŒãå°ããªé åå ã«ãšã©ãŸãäœéšïŒäŸïŒçåžåVRïŒã«é©ããŠããŸãã
- å¢çä»ãåç §ç©ºéïŒBounded Reference SpaceïŒïŒ ããŒã«ã«åç §ç©ºéã«äŒŒãŠããŸããããŠãŒã¶ãŒãç§»åãããšäºæ³ãããç¹å®ã®å¢çïŒäŸïŒé·æ¹åœ¢ã®é åïŒãå®çŸ©ããŸããã«ãŒã ã¹ã±ãŒã«ã®VRäœéšã«åœ¹ç«ã¡ãŸãã
- å¢çãªãåç §ç©ºéïŒUnbounded Reference SpaceïŒïŒ 人工çãªå¢çãªãã«ããŠãŒã¶ãŒããã©ããã³ã°ããªã¥ãŒã å ãèªç±ã«ç§»åã§ããããã«ããŸãããŠãŒã¶ãŒãããåºã空éãæ©ãåã£ãããããè¿ããè¶ ããŠä»®æ³ç°å¢ãæ¢çŽ¢ãããããå¯èœæ§ã®ããäœéšã«æé©ã§ãã
- åºã¬ãã«åç §ç©ºéïŒFloor-Level Reference SpaceïŒïŒ ãã©ããã³ã°ç©ºéãåºã«åºå®ããŸããããã¯æ¡åŒµçŸå®ïŒARïŒã§åœ¹ç«ã¡ããŠãŒã¶ãŒã®ããã€ã¹ã®é«ãã«é¢ä¿ãªãããªããžã§ã¯ããå°é¢ã«ããããã«èŠããŸãã
é©åãªåç §ç©ºéã®éžæïŒ åç §ç©ºéã®éžæã¯ãWebXRã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®èŠä»¶ã«äŸåããŸãã以äžã®èŠçŽ ãèæ ®ããŠãã ããïŒ
- ãã©ããã³ã°ã®å®å®æ§ïŒ ãã©ããã³ã°ã¯ã©ã®çšåºŠå®å®ããŠããå¿ èŠããããŸããïŒæ£ç¢ºãªãªããžã§ã¯ãé 眮ã®ããã«ã¯ãããå®å®ããåç §ç©ºéãå¿ èŠã§ãã
- ãŠãŒã¶ãŒã®åãïŒ ãŠãŒã¶ãŒã«ã¯ã©ã®çšåºŠã®èªç±ãªåãããããŸããïŒäºæ³ãããå¯åç¯å²ã«å¯Ÿå¿ããåç §ç©ºéãéžæããŠãã ããã
- ã¢ããªã±ãŒã·ã§ã³ã®çš®é¡ïŒ çåžåVRäœéšãã«ãŒã ã¹ã±ãŒã«ã®ARã¢ããªã±ãŒã·ã§ã³ããŸãã¯ãã®ä»ã§ããïŒ
äŸïŒ ä»®æ³ã®ã³ãŒããŒã«ãããçŸå®äžçã®ããŒãã«ã«çœ®ãARã¢ããªã±ãŒã·ã§ã³ã®å Žåãããããåºã¬ãã«ã®åç §ç©ºéã䜿çšããŸããããã«ããããŠãŒã¶ãŒãåãåã£ãŠãã«ããã¯ããŒãã«ã®äžã«çãŸããŸãã
座æšç³»å€æïŒã®ã£ãããåãã
è€æ°ã®åº§æšç³»ãæ±ãã«ã¯ããããã®éã§ãªããžã§ã¯ãã倿ããèœåãå¿ èŠã§ããããã«ã¯ããªããžã§ã¯ãããã空éããå¥ã®ç©ºéãžå¹³è¡ç§»åïŒç§»åïŒããã³å転ãããããšãå«ãŸããŸãããããã®å€æãçè§£ããããšã¯ãæ£ç¢ºãªãªããžã§ã¯ãé 眮ãšãã©ããã³ã°ã«äžå¯æ¬ ã§ãã
äž»èŠãªå€æïŒ
- ããŒã«ã«ããã¯ãŒã«ããžïŒ ãªããžã§ã¯ãã®ããŒã«ã«ç©ºéããã¯ãŒã«ã空éãžåº§æšã倿ããŸããããã¯ãã·ãŒã³å ã§ã®ãªããžã§ã¯ãã®çµ¶å¯Ÿäœçœ®ã決å®ããããã«äœ¿çšãããŸãã
- ã¯ãŒã«ãããããŒã«ã«ãžïŒ ã¯ãŒã«ã空éãããªããžã§ã¯ãã®ããŒã«ã«ç©ºéãžåº§æšã倿ããŸããããã¯ãåé¡ã®ãªããžã§ã¯ãã«å¯Ÿããå¥ã®ãªããžã§ã¯ãã®äœçœ®ã決å®ããã®ã«åœ¹ç«ã¡ãŸãã
- åç §ç©ºéããã¯ãŒã«ããžïŒ åç §ç©ºéïŒäŸïŒãŠãŒã¶ãŒã®è¿œè·¡äœçœ®ïŒããã¯ãŒã«ã空éãžåº§æšã倿ããŸããããã«ããããŠãŒã¶ãŒã«å¯ŸããŠãªããžã§ã¯ããé 眮ã§ããŸãã
- ã¯ãŒã«ãããåç §ç©ºéãžïŒ ã¯ãŒã«ã空éããåç §ç©ºéãžåº§æšã倿ããŸããããã¯ãçŸåšã®ãŠãŒã¶ãŒäœçœ®ã«å¯ŸããŠã¯ãŒã«ãå ã®ãªããžã§ã¯ããã©ãã«ããããæ±ºå®ããã®ã«åœ¹ç«ã¡ãŸãã
倿è¡åïŒ å®éã«ã¯ã座æšç³»å€æã¯éåžžã倿è¡åã䜿çšããŠè¡šçŸãããŸãããããã¯ãå¹³è¡ç§»åãšå転ã®äž¡æ¹ã®æ å ±ããšã³ã³ãŒããã4x4è¡åã§ããThree.jsãBabylon.jsãªã©ã®WebXRã©ã€ãã©ãªã¯ã倿è¡åãäœæããã³é©çšããããã®é¢æ°ãæäŸããŸãã
äŸïŒæŠå¿µïŒïŒ
ã¯ãŒã«ã空éã«ä»®æ³ã®è±ãããããã®äœçœ®ãããã£ãŠãããšããŸããããã`viewer`åç §ç©ºéã䜿çšããŠè¿œè·¡ããããŠãŒã¶ãŒã®æã«ä»ããããšããŸããæé ã¯æ¬¡ã®ããã«ãªããŸãïŒ
- ã¯ãŒã«ã空éã®åç¹ãããã¥ãŒã¯ãŒåç §ç©ºéãžã®å€æè¡åãååŸããŸãã
- ãã®è¡åãéè¡åã«ããŠããã¥ãŒã¯ãŒåç §ç©ºéããã¯ãŒã«ã空éãžã®å€æãååŸããŸãã
- è±ã®ã¯ãŒã«ã空éäœçœ®ã衚ã倿è¡åãååŸããŸãã
- ãã¥ãŒã¯ãŒããã¯ãŒã«ããžã®è¡åã«ãè±ã®ã¯ãŒã«ãäœçœ®è¡åãä¹ç®ããŸããããã«ããããã¥ãŒã¯ãŒã«å¯Ÿããè±ã®çžå¯Ÿäœçœ®ãçµæãšããŠåŸãããŸãã
- æåŸã«ãæã®ããŒã«ã«åº§æšç©ºéå ã§ããŒã«ã«ãªãã»ããã远å ããŠãæã«å¯Ÿããè±ã®äœçœ®ã調æŽããŸãã
ãã®äŸã¯ããã¥ãŒã¯ãŒã®é ãæã®ãããªåçã«è¿œè·¡ãããåç §ç©ºéã«å¯ŸããŠãªããžã§ã¯ããé 眮ããããã«å¿ èŠãªäžé£ã®å€æã瀺ããŠããŸãã
å®è·µçãªäŸãšã³ãŒãã¹ãããã
人æ°ã®JavaScript 3Dã°ã©ãã£ãã¯ã¹ã©ã€ãã©ãªã§ããThree.jsã䜿çšããã³ãŒãäŸã§ããããã®æŠå¿µã説æããŸãããã
äŸ1ïŒã¯ãŒã«ã空éã«ãªããžã§ã¯ããé 眮ãã
ãã®ã³ãŒãã¹ããããã¯ãç«æ¹äœãäœæãããããã¯ãŒã«ã空éã«é 眮ããæ¹æ³ã瀺ããŠããŸãïŒ
// Create a cube geometry
const geometry = new THREE.BoxGeometry( 1, 1, 1 );
// Create a material
const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
// Create a mesh (cube)
const cube = new THREE.Mesh( geometry, material );
// Set the cube's position in world space
cube.position.set( 2, 1, -3 ); // X, Y, Z coordinates
// Add the cube to the scene
scene.add( cube );
ãã®äŸã§ã¯ãç«æ¹äœã®`position`ããããã£ã¯ãã¯ãŒã«ã空éã§ã®åº§æšã衚ã`THREE.Vector3`ã§ãã`set()`ã¡ãœããã¯ãç®çã®XãYãZ座æšãå²ãåœãŠãããã«äœ¿çšãããŸãã
äŸ2ïŒããŒã«ã«éå±€ãäœæãã
ãã®ã³ãŒãã¯ã2ã€ã®ãªããžã§ã¯ãéã«èŠªåé¢ä¿ãäœæããããŒã«ã«éå±€ãäœæããæ¹æ³ã瀺ããŠããŸãïŒ
// Create a parent object (e.g., a sphere)
const parentGeometry = new THREE.SphereGeometry( 1, 32, 32 );
const parentMaterial = new THREE.MeshBasicMaterial( { color: 0xff0000 } );
const parent = new THREE.Mesh( parentGeometry, parentMaterial );
scene.add( parent );
// Create a child object (e.g., a cube)
const childGeometry = new THREE.BoxGeometry( 0.5, 0.5, 0.5 );
const childMaterial = new THREE.MeshBasicMaterial( { color: 0x0000ff } );
const child = new THREE.Mesh( childGeometry, childMaterial );
// Set the child's position relative to the parent (in parent's local space)
child.position.set( 1.5, 0, 0 );
// Add the child to the parent
parent.add( child );
// Rotate the parent, and the child will rotate around it
parent.rotation.y += 0.01;
ããã§ã¯ã`child`ãªããžã§ã¯ãã`parent.add(child)`ã䜿çšããŠ`parent`ãªããžã§ã¯ãã®åãšããŠè¿œå ãããŸããåã®`position`ã¯ã芪ã®ããŒã«ã«ç©ºéã«å¯ŸããŠçžå¯Ÿçã«è§£éãããããã«ãªããŸãã芪ãå転ããããšãåããã®åšããå転ããçžå¯Ÿçãªäœçœ®é¢ä¿ãç¶æããŸãã
äŸ3ïŒåç §ç©ºéã§ãŠãŒã¶ãŒã®äœçœ®ã远跡ãã
ãã®ã³ãŒãã¯ãåç §ç©ºéã䜿çšããŠãŠãŒã¶ãŒã®ããŒãºïŒäœçœ®ãšåãïŒãååŸããæ¹æ³ã瀺ããŠããŸãïŒ
async function onSessionStarted( session ) {
// Request a local reference space
const referenceSpace = await session.requestReferenceSpace( 'local' );
session.requestAnimationFrame( function animate(time, frame) {
session.requestAnimationFrame( animate );
if ( frame ) {
const pose = frame.getViewerPose( referenceSpace );
if ( pose ) {
// Get the user's position
const position = pose.transform.position;
// Get the user's orientation (quaternion)
const orientation = pose.transform.orientation;
// Use the position and orientation to update the scene or objects.
// For example, position a virtual object in front of the user:
myObject.position.copy(position).add(new THREE.Vector3(0, 0, -2));
myObject.quaternion.copy(orientation);
}
}
});
}
ãã®ã³ãŒãã¯ã`XRFrame`ãã`ViewerPose`ãååŸããŸããããã¯ãæå®ããã`referenceSpace`ã«å¯ŸãããŠãŒã¶ãŒã®äœçœ®ãšåããæäŸããŸãã`position`ãš`orientation`ã¯ãã·ãŒã³ãæŽæ°ããããã«äœ¿çšã§ããŸããäŸãã°ããŠãŒã¶ãŒã®åã«ä»®æ³ãªããžã§ã¯ããé 眮ãããªã©ã§ãã
座æšç³»ç®¡çã®ãã¹ããã©ã¯ãã£ã¹
æ£ç¢ºã§å ç¢ãªWebXRäœéšãä¿èšŒããããã«ã座æšç³»ç®¡çã«é¢ãã以äžã®ãã¹ããã©ã¯ãã£ã¹ã«åŸã£ãŠãã ããïŒ
- é©åãªåç §ç©ºéãéžæããïŒ ã¢ããªã±ãŒã·ã§ã³ã®ãã©ããã³ã°èŠä»¶ãæ éã«æ€èšããé©åãªåç §ç©ºéãéžæããŠãã ãããééã£ãåç §ç©ºéã䜿çšãããšãäžå®å®ããäžæ£ç¢ºãªãªããžã§ã¯ãé 眮ã«ã€ãªããå¯èœæ§ããããŸãã
- éå±€ãçè§£ããïŒ ããŒã«ã«éå±€ãå©çšããŠãªããžã§ã¯ããæŽçãã倿ãç°¡çŽ åããŸããããã«ãããè€éãªã·ãŒã³ã®ç®¡çã容æã«ãªãããªããžã§ã¯ãéã®é¢ä¿ãç¶æãããããªããŸãã
- 倿è¡åã䜿çšããïŒ å¹ççãªåº§æšç³»å€æã®ããã«å€æè¡åãæŽ»çšããŸããWebXRã©ã€ãã©ãªã¯ããããã®è¡åãäœæããã³æäœããããã®ããŒã«ãæäŸããŸãã
- 培åºçã«ãã¹ãããïŒ ç°ãªãããã€ã¹ãããŸããŸãªç°å¢ã§ã¢ããªã±ãŒã·ã§ã³ããã¹ãããäžè²«ããåäœã確èªããŠãã ããã座æšç³»ã®åäœã¯ãã©ãããã©ãŒã ã«ãã£ãŠç°ãªãå ŽåããããŸãã
- ãã©ããã³ã°ãã¹ãåŠçããïŒ ãã©ããã³ã°ã倱ãããå Žåã«é©åã«å¯ŸåŠããã¡ã«ããºã ãå®è£ ããŸãããã©ããã³ã°ã倱ãããå Žåã¯ãã·ãŒã³ãããªãŒãºãããããŠãŒã¶ãŒã«èŠèŠçãªåå³ãæäŸããããšãæ€èšããŠãã ãããããŒã«ã«åç §ç©ºéã䜿çšããŠããå Žåã¯ãæ°ããåç §ç©ºéãèŠæ±ãããŠãŒã¶ãŒãã¹ã ãŒãºã«ç§»è¡ãããããšãæ€èšããŸãã
- ãŠãŒã¶ãŒã®å¿«é©ããèæ ®ããïŒ ãŠãŒã¶ãŒã®èŠç¹ãæ¥æ¿ãŸãã¯äºæããå€åããã®ãé¿ããŠãã ããã座æšç³»ã®çªç¶ã®å€åã¯ãèŠåœèé害ãåãæ°ãåŒãèµ·ããå¯èœæ§ããããŸãã
- ã¹ã±ãŒã«ã«æ³šæãæãïŒ ãªããžã§ã¯ããšã·ãŒã³å šäœã®ã¹ã±ãŒã«ã远跡ããŠãã ãããã¹ã±ãŒãªã³ã°ã®åé¡ã¯ãèŠèŠçãªã¢ãŒãã£ãã¡ã¯ããäžæ£ç¢ºãªç©ºéèªèã«ã€ãªããå¯èœæ§ããããŸããARã§ã¯ãçŸå®äžçã®ã¹ã±ãŒã«ãæ£ç¢ºã«è¡šçŸããããšããä¿¡ææ§ã®ããã«æãéèŠã§ãã
- ãããã°ããŒã«ã䜿çšããïŒ WebXRãããã°ããŒã«ïŒäŸïŒWebXR Device APIãšãã¥ã¬ãŒã¿ãŒïŒãå©çšããŠã座æšç³»ãèŠèŠåãã倿ã远跡ããŸãããããã®ããŒã«ã¯ã座æšç³»ç®¡çã«é¢é£ããåé¡ãç¹å®ãã解決ããã®ã«åœ¹ç«ã¡ãŸãã
é«åºŠãªãããã¯
è€æ°ã®åç §ç©ºé
äžéšã®WebXRã¢ããªã±ãŒã·ã§ã³ã§ã¯ãè€æ°ã®åç §ç©ºéãåæã«äœ¿çšããããšã§ã¡ãªãããåŸãããå ŽåããããŸããããšãã°ãäžè¬çãªãã©ããã³ã°ã«ã¯ããŒã«ã«åç §ç©ºéã䜿çšããå°é¢ã«ãªããžã§ã¯ããé 眮ããããã«ã¯åºã¬ãã«åç §ç©ºéã䜿çšãããªã©ã§ããè€æ°ã®åç §ç©ºéã管çããã«ã¯ãæ éãªèª¿æŽãšå€æããžãã¯ãå¿ èŠã§ãã
ã¢ã³ã«ãŒ
WebXRã¢ã³ã«ãŒã¯ãä»®æ³ãªããžã§ã¯ããšçŸå®äžçã®ãªããžã§ã¯ããšã®éã«æ°žç¶çãªç©ºéçé¢ä¿ãäœæããæ¹æ³ãæäŸããŸããã¢ã³ã«ãŒã¯ããŠãŒã¶ãŒãåãåã£ãŠãä»®æ³ãªããžã§ã¯ããçŸå®äžçã«å¯ŸããŠåºå®ããããŸãŸã§ããããšãä¿èšŒãããARã¢ããªã±ãŒã·ã§ã³ã§ç¹ã«åœ¹ç«ã¡ãŸããã¢ã³ã«ãŒã¯ãä»®æ³ãªããžã§ã¯ãããŠãŒã¶ãŒã®ç°å¢å ã®ç¹å®ã®å Žæã«æä¹ çã«ããã³çãããããã®ãšèããŠãã ããã
äŸïŒ çŸå®äžçã®ããŒãã«ã«ã¢ã³ã«ãŒãé 眮ãããã®ã¢ã³ã«ãŒã«ä»®æ³ã®ã©ã³ããåãä»ããããšãã§ããŸããããããã°ããŠãŒã¶ãŒã®åãã«é¢ä¿ãªããã©ã³ãã¯ããŒãã«ã®äžã«çãŸããŸãã
ããããã¹ã
ããããã¹ãã䜿çšãããšãã¬ã€ïŒ3D空éå ã®ç·ïŒãçŸå®äžçã®è¡šé¢ãšäº€å·®ãããã©ããã倿ã§ããŸããããã¯ãããã€ã¹ã®ã»ã³ãµãŒã«ãã£ãŠæ€åºããã衚é¢ã«ä»®æ³ãªããžã§ã¯ããé 眮ããããã«ãARã¢ããªã±ãŒã·ã§ã³ã§äžè¬çã«äœ¿çšãããŸããããããã¹ãã¯ããŠãŒã¶ãŒãçŸå®äžçã§ä»®æ³ãªããžã§ã¯ããæäœã§ããã€ã³ã¿ã©ã¯ãã£ããªARäœéšãäœæããããã«äžå¯æ¬ ã§ãã
äŸïŒ ããããã¹ãã䜿çšããŠããŠãŒã¶ãŒãçŸå®äžçã®åºãã¿ãããããã®å Žæã«ä»®æ³ãã£ã©ã¯ã¿ãŒãé 眮ã§ããããã«ããããšãã§ããŸãã
çµè«
座æšç³»ç®¡çãç¿åŸããããšã¯ãé åçã§æ£ç¢ºãªWebXRäœéšãæ§ç¯ããããã®åºæ¬ã§ããããŸããŸãªçš®é¡ã®åº§æšç©ºéãçè§£ãã倿ãç¿åŸãããã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ãä»®æ³äžçãšç©çäžçãã·ãŒã ã¬ã¹ã«èåãããæ²¡å ¥åã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãã
WebXRæè¡ãé²åãç¶ããã«ã€ããŠãæ°ããæ©èœãèœåãç»å ŽããŸããææ°ã®éçºç¶æ³ãåžžã«ææ¡ããããŸããŸãªæè¡ã詊ãããšã§ãæ²¡å ¥åäœéšã®éçãæŒãåºããçã«é©æ°çãªã¢ããªã±ãŒã·ã§ã³ãäœæããããšãã§ããŸãã
WebXRã¯ãæè²ããã¬ãŒãã³ã°ãããã«ã¹ã±ã¢ããšã³ã¿ãŒãã€ã¡ã³ããŸã§ãäžçäžã®ããŸããŸãªæ¥çã§æ¥éã«å¢ããå¢ããŠããŸãã座æšç³»ãååã«çè§£ããããšã¯ãå°æ¥ã®éçºè ã«ãšã£ãŠäžå¯æ¬ ã«ãªãã§ããããåœéçãªã¢ããªã±ãŒã·ã§ã³ã®äŸã¯æ¬¡ã®ãšããã§ãïŒ
- ããŒãã£ã«ããŒãªãºã ïŒã°ããŒãã«ïŒïŒ ãŠãŒã¶ãŒãäžçäžã®ã©ã³ãããŒã¯ãæ£ç¢ºãªã¹ã±ãŒã«ãšäœçœ®ã§ä»®æ³çã«æ¢çŽ¢ã§ããããã«ããŸãã
- ãªã¢ãŒãã³ã©ãã¬ãŒã·ã§ã³ïŒåœéããŒã ïŒïŒ ç©ççãªå Žæã«é¢ä¿ãªããããŒã ãå ±æã®ä»®æ³ç©ºéã§3Dã¢ãã«ã«å ±åã§åãçµãããšãå¯èœã«ããŸãã
- AR匷åæè²ïŒå€èšèªïŒïŒ ã€ã³ã¿ã©ã¯ãã£ããª3Dã¢ãã«ãæç§æžã«éãåãããè€æ°ã®èšèªã§ã¢ã¯ã»ã¹å¯èœãªæ²¡å ¥ååŠç¿äœéšãåµåºããŸãã
- ãã«ã¹ã±ã¢ãã¬ãŒãã³ã°ïŒäžçèŠæš¡ïŒïŒ 粟å¯ãªè§£ååŠçã¢ãã«å ã§çŸå®çãªã·ãã¥ã¬ãŒã·ã§ã³ã䜿çšããŠãå»åž«ãçè·åž«ã«å€ç§æè¡ã®ãã¬ãŒãã³ã°ãè¡ããŸãã
å¯èœæ§ã¯ç¡é倧ã§ãã確ããªç©ºéçè§£ã«çŠç¹ãåœãŠãç¶ç¶çãªåŠç¿ãåãå ¥ããããšã§ãWebXRéçºã®ãšããµã€ãã£ã³ã°ãªé åãããŸãããã²ãŒãããããšãã§ããŸãã